﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.IO;
using System.Net.Mail;
using BLLEP;
using BLLEP.Funcionalidad;

namespace EstacionDePoder.Codigo
{
    public class Mailer
    {
        private HttpContext _contexto;

        public string Mailventas { get { return ConfigurationManager.AppSettings["MailVentas"]; } }


        public Mailer(HttpContext contexto)
        {
            _contexto = contexto;
        }

        public void EnviarEmail(string nombreTemplate, Dictionary<string, string> valores, string asunto, string mailDestino, string mailOrigen)
        {
            string nombreArchivo = _contexto.Server.MapPath("/" + ConfigurationManager.AppSettings["CarpetaEmailTemplates"] + "/" + nombreTemplate);
            string contenidoMailTemplate = File.ReadAllText(nombreArchivo);

            foreach (KeyValuePair<string, string> item in valores)
                contenidoMailTemplate = contenidoMailTemplate.Replace(item.Key, item.Value);

            MailMessage mensaje = new MailMessage(new MailAddress(mailOrigen), new MailAddress(mailDestino));
            mensaje.Body = contenidoMailTemplate;
            mensaje.Subject = asunto;
            mensaje.IsBodyHtml = true;

            SmtpClient cliente = new SmtpClient();
            cliente.Send(mensaje);
        }
        
        public bool EnviarEmailActivacionCuenta(string emailDestino)
        {
            try
            {
                Dictionary<string, string> valores = new Dictionary<string, string>();
                BLLCodigoActivacion bllCodigoActivacion = new BLLCodigoActivacion();
                string codigo = bllCodigoActivacion.GenerarCodigo(emailDestino);
                bllCodigoActivacion.GuardarCambios();

                string url = "http://" + _contexto.Request.Url.Authority + "/Cuentas/Activar.aspx?cod=" + codigo;
                valores.Add("[LinkActivacion]", url);

                EnviarEmail("ActivarUsuario.htm", valores, "Activación de cuenta", emailDestino, Mailventas);
            }
            catch (Exception ex)
            {
                return false;
            }

            return true;
        }

        public bool EnviarEMailCambioContraseña(string emailDestino)
        {
            try
            {
                Dictionary<string, string> valores = new Dictionary<string, string>();
                BLLCodigoActivacion bllCodigoActivacion = new BLLCodigoActivacion();
                string codigo = bllCodigoActivacion.GenerarCodigo(emailDestino);
                bllCodigoActivacion.GuardarCambios();

                string valorCodificado = bllCodigoActivacion.Encriptador.Encriptar(codigo);
                EP_Usuario usuario = new BLLUsuario().Traer(emailDestino);
                string url = "http://" + _contexto.Request.Url.Authority + "/Cuentas/ModificarPass.aspx?cod=" + HttpUtility.UrlEncode(valorCodificado) + "&id=" + usuario.IdUsuario.ToString();
                valores.Add("[LinkActivacion]", url);

                EnviarEmail("RecuperarPass.htm", valores, "Recuperar cuenta", emailDestino, Mailventas);
            }
            catch (Exception ex)
            {
                return false;
            }

            return true;
        }

    }
}